home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World Komputer 2007 December
/
PCWKCD1207B.iso
/
Blogowanie poza sfera
/
Flock 1.0 beta
/
flock-1.0RC3.en-US.win32.exe
/
flock
/
components
/
flockLoggingFileWriter.js
< prev
next >
Wrap
Text File
|
2007-10-18
|
6KB
|
181 lines
//
// BEGIN FLOCK GPL
//
// Copyright Flock Inc. 2005-2007
// http://flock.com
//
// This file may be used under the terms of of the
// GNU General Public License Version 2 or later (the "GPL"),
// http://www.gnu.org/licenses/gpl.html
//
// Software distributed under the License is distributed on an "AS IS" basis,
// WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
// for the specific language governing rights and limitations under the
// License.
//
// END FLOCK GPL
//
const CC = Components.classes;
const CI = Components.interfaces;
const CR = Components.results;
Components.utils.import("resource:///modules/FlockXPCOMUtils.jsm");
FlockXPCOMUtils.debug = false;
const MODULE_NAME = "Flock Logging File Writer";
const CLASS_NAME = "Flock Logging File Writer";
const CLASS_ID = Components.ID("{b2045e5e-c742-4dbc-8fae-233f428bc9c0}");
const CONTRACT_ID = "@flock.com/logging-file-writer;1";
const LOGGER_FILENAME = "log.txt";
/* from nspr's prio.h */
const PR_RDONLY = 0x01;
const PR_WRONLY = 0x02;
const PR_RDWR = 0x04;
const PR_CREATE_FILE = 0x08;
const PR_APPEND = 0x10;
const PR_TRUNCATE = 0x20;
const PR_SYNC = 0x40;
const PR_EXCL = 0x80;
/**************************************************************************
* Component: Flock Logging File Writer
**************************************************************************/
// Constructor.
function flockLoggingFileWriter()
{
this._initialized = false;
// Note: This observer is required for the life of the application.
// Not removing it anywhere looks like a leak, but in fact it
// does not leak until the application exits, at which
// point it becomes moot.
var obs = CC["@mozilla.org/observer-service;1"]
.getService(CI.nsIObserverService);
obs.addObserver(this, "profile-after-change", false);
}
/**************************************************************************
* Flock Logging File Writer: XPCOM Component Creation
**************************************************************************/
flockLoggingFileWriter.prototype = new FlockXPCOMUtils.genericComponent(
CLASS_NAME,
CLASS_ID,
CONTRACT_ID,
flockLoggingFileWriter,
CI.nsIClassInfo.SINGLETON,
[
CI.flockILoggingObserver,
CI.nsIObserver
]
);
// FlockXPCOMUtils.genericModule() categories
flockLoggingFileWriter.prototype._xpcom_categories = [
{ category: "flockILoggingObserver" }
];
/**************************************************************************
* Flock Logging File Writer: Private Data and Functions
**************************************************************************/
// Member variables.
flockLoggingFileWriter.prototype._initialized = null;
flockLoggingFileWriter.prototype._converter = null;
flockLoggingFileWriter.prototype._outputStream = null;
flockLoggingFileWriter.prototype._initFile =
function LogFileWriter__initFile() {
// Prepare the log file for the requested module
var dirService = CC["@mozilla.org/file/directory_service;1"]
.getService(CI.nsIProperties);
var profileDir = dirService.get("ProfD", CI.nsILocalFile);
var file = CC["@mozilla.org/file/local;1"].createInstance(CI.nsILocalFile);
file.initWithPath(profileDir.path);
file.append(LOGGER_FILENAME);
if (!file.exists()) {
// 0600 = -rw------- permissions
file.createUnique(CI.nsILocalFile.NORMAL_FILE_TYPE, 0600);
}
var transport = CC["@mozilla.org/network/file-output-stream;1"]
.createInstance(CI.nsIFileOutputStream);
// 0640 = -rw-r----- permissions
transport.init(file, PR_RDWR | PR_CREATE_FILE | PR_APPEND, 0640, 0);
this._converter = CC["@mozilla.org/intl/scriptableunicodeconverter"]
.createInstance(CI.nsIScriptableUnicodeConverter);
this._converter.charset = "UTF-8";
this._outputStream = CC["@mozilla.org/network/buffered-output-stream;1"]
.createInstance(CI.nsIBufferedOutputStream);
this._outputStream.init(transport, 65536 * 4); // 256k buffer
this._initialized = true;
}
flockLoggingFileWriter.prototype._pad =
function LogFileWriter__pad(aNumber, aPlaces) {
var numberString = aNumber + "";
while (numberString.length < aPlaces) {
numberString = "0" + numberString;
}
return numberString;
}
/**************************************************************************
* Flock Logging File Writer: flockILoggingService Implementation
**************************************************************************/
flockLoggingFileWriter.prototype.emit =
function LogFileWriter_emit(aDate, aLevel, aContext, aMessage) {
if (this._initialized) {
var levels = ["all", "debug", "info", "warn", "error", "fatal"];
var date = new Date(aDate);
var dateString = date.toLocaleFormat("%Y-%m-%d %H:%M:%S.")
+ this._pad(date.getMilliseconds(), 3);
var content = "[" + dateString + " " + aContext
+ ":" + levels[aLevel] + "] " + aMessage
+ "\n";
var inputStream = this._converter.convertToInputStream(content);
this._outputStream.writeFrom(inputStream, inputStream.available());
this._outputStream.flush();
}
}
/**************************************************************************
* Flock Logging File Writer: nsIObserver Implementation
**************************************************************************/
flockLoggingFileWriter.prototype.observe =
function LogFileWriter_observe(subject, topic, state) {
switch (topic) {
case "profile-after-change":
// init log file
this._initFile();
break;
}
}
/**************************************************************************
* END Flock Logging File Writer
**************************************************************************/
/**************************************************************************
* XPCOM Support - Module Construction
**************************************************************************/
// Create array of components.
var gComponentsArray = [flockLoggingFileWriter];
// Generate a module for XPCOM to find.
var NSGetModule = FlockXPCOMUtils.generateNSGetModule(MODULE_NAME,
gComponentsArray);